<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/asm-generic/getorder.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/asm-generic/getorder.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X19BU01fR0VORVJJQ19HRVRPUkRFUl9IXzA_"><span class="b">__ASM_GENERIC_GETORDER_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19BU01fR0VORVJJQ19HRVRPUkRFUl9IXzA_"><span class="b">__ASM_GENERIC_GETORDER_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="5" /><span class="True">       5:</span> 
<a name="6" /><span class="True">       6:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="7" /><span class="True">       7:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">log2</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="8" /><span class="True">       8:</span> 
<a name="9" /><span class="True">       9:</span> <span class="k">/*</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * Runtime evaluation of get_order()</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> */</span>
<a name="12" /><span class="True">      12:</span> <span class="m">static</span> <span class="m">inline</span> <a href="cpu.c_macros_ref.html#_X19hdHRyaWJ1dGVfY29uc3RfX18w"><span class="b">__attribute_const__</span></a>
<a name="13" /><span class="True">      13:</span> <span class="m">int</span> <span class="b">__get_order</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="b">size</span><span class="f">)</span>
<a name="14" /><span class="True">      14:</span> <span class="f">{</span>
<a name="15" /><span class="True">      15:</span>     <span class="m">int</span> <span class="b">order</span><span class="f">;</span>
<a name="16" /><span class="True">      16:</span> 
<a name="17" /><span class="True">      17:</span>     <span class="b">size</span><span class="f">--</span><span class="f">;</span>
<a name="18" /><span class="True">      18:</span>     <span class="b">size</span> <span class="f">&gt;&gt;=</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">;</span>
<a name="19" /><span class="False">      19:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">==</span> <span class="c">32</span>
<a name="20" /><span class="False">      20:</span>     <span class="b">order</span> <span class="f">=</span> <span class="b">fls</span><span class="f">(</span><span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">else</span>
<a name="22" /><span class="True">      22:</span>     <span class="b">order</span> <span class="f">=</span> <span class="b">fls64</span><span class="f">(</span><span class="b">size</span><span class="f">)</span><span class="f">;</span>
<a name="23" /><span class="True">      23:</span> <span class="f">#</span><span class="n">endif</span>
<a name="24" /><span class="True">      24:</span>     <span class="m">return</span> <span class="b">order</span><span class="f">;</span>
<a name="25" /><span class="True">      25:</span> <span class="f">}</span>
<a name="26" /><span class="True">      26:</span> 
<a name="27" /><span class="True">      27:</span> <span class="k">/**</span>
<a name="28" /><span class="True">      28:</span> <span class="k"> * get_order - Determine the allocation order of a memory size</span>
<a name="29" /><span class="True">      29:</span> <span class="k"> * @size: The size for which to get the order</span>
<a name="30" /><span class="True">      30:</span> <span class="k"> *</span>
<a name="31" /><span class="True">      31:</span> <span class="k"> * Determine the allocation order of a particular sized block of memory.  This</span>
<a name="32" /><span class="True">      32:</span> <span class="k"> * is on a logarithmic scale, where:</span>
<a name="33" /><span class="True">      33:</span> <span class="k"> *</span>
<a name="34" /><span class="True">      34:</span> <span class="k"> *    0 -&gt; 2^0 * PAGE_SIZE and below</span>
<a name="35" /><span class="True">      35:</span> <span class="k"> *    1 -&gt; 2^1 * PAGE_SIZE to 2^0 * PAGE_SIZE + 1</span>
<a name="36" /><span class="True">      36:</span> <span class="k"> *    2 -&gt; 2^2 * PAGE_SIZE to 2^1 * PAGE_SIZE + 1</span>
<a name="37" /><span class="True">      37:</span> <span class="k"> *    3 -&gt; 2^3 * PAGE_SIZE to 2^2 * PAGE_SIZE + 1</span>
<a name="38" /><span class="True">      38:</span> <span class="k"> *    4 -&gt; 2^4 * PAGE_SIZE to 2^3 * PAGE_SIZE + 1</span>
<a name="39" /><span class="True">      39:</span> <span class="k"> *    ...</span>
<a name="40" /><span class="True">      40:</span> <span class="k"> *</span>
<a name="41" /><span class="True">      41:</span> <span class="k"> * The order returned is used to find the smallest allocation granule required</span>
<a name="42" /><span class="True">      42:</span> <span class="k"> * to hold an object of the specified size.</span>
<a name="43" /><span class="True">      43:</span> <span class="k"> *</span>
<a name="44" /><span class="True">      44:</span> <span class="k"> * The result is undefined if the size is 0.</span>
<a name="45" /><span class="True">      45:</span> <span class="k"> *</span>
<a name="46" /><span class="True">      46:</span> <span class="k"> * This function may be used to initialise variables with compile time</span>
<a name="47" /><span class="True">      47:</span> <span class="k"> * evaluations of constants.</span>
<a name="48" /><span class="True">      48:</span> <span class="k"> */</span>
<a name="49" /><span class="True">      49:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_Z2V0X29yZGVyXzA_"><span class="b">get_order</span></a><span class="f">(</span><span class="b">n</span><span class="f">)</span>                        \
<a name="50" /><span class="True">      50:</span> <span class="f">(</span>                                \
<a name="51" /><span class="True">      51:</span>     <span class="b">__builtin_constant_p</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">?</span> <span class="f">(</span>                \
<a name="52" /><span class="True">      52:</span>         <span class="f">(</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">==</span> <span class="c">0UL</span><span class="f">)</span> <span class="f">?</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a> <span class="f">:</span>    \
<a name="53" /><span class="True">      53:</span>         <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">&lt;</span> <span class="f">(</span><span class="c">1UL</span> <span class="f">&lt;&lt;</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a><span class="f">)</span><span class="f">)</span> <span class="f">?</span> <span class="c">0</span> <span class="f">:</span>        \
<a name="54" /><span class="True">      54:</span>          <a href="cpu.c_macros_ref.html#_aWxvZzJfMA__"><span class="b">ilog2</span></a><span class="f">(</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">-</span> <span class="c">1</span><span class="f">)</span> <span class="f">-</span> <a href="cpu.c_macros_ref.html#_UEFHRV9TSElGVF8w"><span class="b">PAGE_SHIFT</span></a> <span class="f">+</span> <span class="c">1</span><span class="f">)</span>        \
<a name="55" /><span class="True">      55:</span>     <span class="f">)</span> <span class="f">:</span>                            \
<a name="56" /><span class="True">      56:</span>     <span class="b">__get_order</span><span class="f">(</span><span class="b">n</span><span class="f">)</span>                        \
<a name="57" /><span class="True">      57:</span> <span class="f">)</span>
<a name="58" /><span class="True">      58:</span> 
<a name="59" /><span class="True">      59:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __ASSEMBLY__ */</span>
<a name="60" /><span class="True">      60:</span> 
<a name="61" /><span class="True">      61:</span> <span class="f">#</span><span class="n">endif</span>    <span class="k">/* __ASM_GENERIC_GETORDER_H */</span>
<a name="62" /><span class="True">      62:</span> </pre>
  </body>
</html>
